package com.ruoyi.spspublic.service;

import com.ruoyi.common.core.domain.AjaxResult;
import com.ruoyi.spspublic.domain.TMisTask;
import com.ruoyi.spspublic.domain.dto.TicketSubmitDTO;
import com.ruoyi.spspublic.domain.vo.TagListVO;
import com.ruoyi.spspublic.domain.vo.TaskMainPageVO;

import java.util.List;

/**
 * 任务列Service接口
 *
 * @author ruoyi
 * @date 2023-08-18
 */
public interface ITMisTaskService {
    /**
     * 查询任务列
     *
     * @param ctId 任务列ID
     * @return 任务列
     */
    public TMisTask selectTMisTaskById(String ctId);

    /**
     * 查询任务列列表
     *
     * @param tMisTask 任务列
     * @return 任务列集合
     */
    public List<TMisTask> selectTMisTaskList(TMisTask tMisTask);

    /**
     * 新增任务列
     *
     * @param tMisTask 任务列
     * @return 结果
     */
    public int insertTMisTask(TMisTask tMisTask);

    /**
     * 修改任务列
     *
     * @param tMisTask 任务列
     * @return 结果
     */
    public int updateTMisTask(TMisTask tMisTask);

    /**
     * 批量删除任务列
     *
     * @param ctIds 需要删除的任务列ID
     * @return 结果
     */
    public int deleteTMisTaskByIds(String[] ctIds);

    /**
     * 删除任务列信息
     *
     * @param ctId 任务列ID
     * @return 结果
     */
    public int deleteTMisTaskById(String ctId);

    public TMisTask selectOldTask(String funNo, String bussId);

    /**
     * 单据提交
     *
     * @param tMisTask
     * @return
     */
    String submitTicket(TicketSubmitDTO tMisTask);

    AjaxResult publishCheck(TicketSubmitDTO tMisTask);

    /**
     * 单据签发
     *
     * @param submitDTO
     * @return
     */
    String publish(TicketSubmitDTO submitDTO);

    /**
     * 撤销单据签发
     *
     * @param tMisTask
     * @return
     */
    String withDraw(TicketSubmitDTO tMisTask);

    /**
     * 撤回单据
     *
     * @param submitDTO
     * @return
     */
    String revoke(TicketSubmitDTO submitDTO);

    /**
     * 查找本人/本部门/本角色待办任务
     *
     * @param task
     * @return
     */
    List<TaskMainPageVO> selectTodoTaskList(TMisTask task);

    /**
     * 所选申请党员最后一个代办任务 todo sql可能有非唯一性风险
     *
     * @param ctId
     * @return
     */
    List<TMisTask> selectPartymanLastTask(String ctId);

    /**
     * 单据检阅
     *
     * @param submitDTO
     * @return
     */
    String inspect(TicketSubmitDTO submitDTO);

    /**
     * 根据功能号和业务号删除所有任务
     *
     * @param functionNumber
     * @param ctId
     */
    void deleteTMisTaskByBusinessNo(String functionNumber, String ctId);

    /**
     * 查询登录人的任务种类+数量
     *
     * @return
     */
    List<TagListVO> tagList();

    /**
     * 通用，给新增未签发的单据添加任务
     */
    <T> T insertTodoTask(T ticket);

    /**
     * 当党员转移后讲未完成的任务给别人
     *
     * @param ticketSubmitDTO
     * @return
     */
    String assignTask(TicketSubmitDTO ticketSubmitDTO);

    /**
     * 查询组织/角色待办
     *
     * @param tMisTask
     * @return
     */
    List<TMisTask> selectBranchTaskList(TMisTask tMisTask);

    /**
     * 需要发统一代办/统一消息的任务
     */
    List<TMisTask> selectTaskNeedPushing();

    /**
     * 已经完成的代办需要删除统一代办
     * @return
     */
    List<TMisTask> selectTaskNeedDeleting();
}
